package 多线程.Test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {
    /**
     * 这里面有个问题就是为什么不是执行两边这个Callable里面的输出语句呢？
     *
     * 创建FutureTask对象，然后调用run方法来执行任务。但是这里面有一个状态码是State，
     * 来表示任务的执行状态，如果State是New的话，那么就是直接执行Callable中的call()方法并且存储起来方法的返回值，
     * 但是执行完这个方法之后，State就会由COMPLETING（完成中）转换到NORMAL（正常结束）。然后下次再调用run方法的时候，
     * State状态就不是New了，就不会再运行Callable的call()方法了。
     *
     * ----------------
     * 990921
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyThread myThread = new MyThread();
        FutureTask futureTask = new FutureTask(myThread);
        Thread thread = new Thread(futureTask);
        Thread thread1 = new Thread(futureTask);
        thread.start();
        thread1.start();

        //get可能会产生阻塞。
        String str = (String)futureTask.get();
        System.out.println(str);
    }
}
class MyThread implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("----------------");
        return "990921";
    }
}
